Software engineers have used object-oriented programming to model real world entities and concepts for decades. Object-oriented languages, such as Java®, allow programmers to model entities and concepts by using object-oriented constructs such as encapsulation, inheritance, and polymorphism. Although object-oriented code may be designed to model real-world entities and concepts accurately, object-oriented code is usually integrated with “infrastructure” code that is designed to interact with particular software packages, frameworks, and hardware.
The difficulty of modifying an object-oriented codebase increases with the size of the codebase. The term codebase, or code base, is used in software development to mean the entire collection of source code used to build a particular application or component. In some situations, the codebase's software engineers may want to integrate the codebase with other software, such as another codebase, another software framework, or another software product. However, the other software may require the codebase to have a particular structure or certain features that the codebase does not have. For example, some software may require the classes of the codebase to inherit (or “extend”) from other classes, to implement certain interfaces, to call certain methods, etc. Although modifying the codebase to accommodate the requirements may be possible, the modifications might be costly, time-consuming, and may introduce other problems or errors.